Модуль:Инфобокс персонажа
local infoboxCharacter = {} function infoboxCharacter.infoboxCreate(frame) --десериализация аргументов local args = frame.args local argsImg = infoboxCharacter.tools.argsDeSerial(args.images, {"@",";",":"}, "^@;:∅") local argsKind = infoboxCharacter.tools.argsParse(args.kind, argsImg, {"@",";"}, "^@;") local argsAge = infoboxCharacter.tools.argsParse(args.age, argsImg, {"@",";"}, "^@;") --подготовка элементов --основа local infobox = infoboxCharacter.build.mainBoxCreate(args.number, args.width) --заголовок local header = infoboxCharacter.build.headerCreate(args.headerColor, args.headerFontColor, args.headerFontSize, args.name) --титул local title if (args.title ~= "") then title = infoboxCharacter.build.titleCreate(args.title) end --изображения local images if (argsImg1 and argsImg11) then images = infoboxCharacter.build.imagesCreate(argsImg, args) end --вид local kind if (argsKind) then kind = infoboxCharacter.build.kindCreate(argsKind, args.gender) end --пол local gender if (args.gender ~= "") then gender = infoboxCharacter.build.genderCreate(args.gender, argsKind, argsAge) end --построение инфобокса --заголовок infobox:node(header) --титул if (title) then infobox:node(title) end --изображения if (images) then for i = 1, #images do infobox:node(imagesi) end end --вид if (kind) then infobox:node(kind) end --пол if (gender) then infobox:node(gender) end return infobox end --local buttonsList = mw.html.create("div") --buttonsList:cssText("width:100%; margin:6px 0 0; text-align:center") --buttonsList:addClass("module-"..args.number.."-"..i) --buttonsList:attr("id", "buttonsList-"..args.number.."-"..i) --if (i > 1) then -- buttonsList:css("display", "none") --end --local button = mw.html.create("div") --button:addClass("infoboxButton") -- button:attr("data-description", parsedImagesArray1) --button:attr("id", "control-"..args.number.."-"..i.."-"..j) --buttonsList:node(button) --создание элементов infoboxCharacter.build = {} --основа function infoboxCharacter.build.mainBoxCreate(number, width) local mainBox = mw.html.create("div") mainBox:addClass("infoboxCharacter") mainBox:attr("id", "infoboxCharacter-"..number) mainBox:css("width", width) return mainBox end --заголовок function infoboxCharacter.build.headerCreate(backgroundColor, fontColor, fontSize, name) local header = mw.html.create("div") header:addClass("infoboxCharacterHeader") header:css("background-color", backgroundColor) local headerText = mw.html.create("div") headerText:cssText("margin:auto; color:"..fontColor.."; font-size:"..fontSize) headerText:wikitext(name) header:node(headerText) return header end --титул function infoboxCharacter.build.titleCreate(titleText) local title = mw.html.create("div") title:addClass("infoboxCharacterTitle") title:wikitext(titleText) return title end --изображения function infoboxCharacter.build.imagesCreate(argsImg, args) local images = {} for i = 1, #argsImg do local imgBlock --если в текущем блоке одно изображение if (#argsImgi 1) then imgBlock = mw.html.create("div") imgBlock:wikitext("[[Файл:"..argsImgi12.."|"..args.width.."|link=]]") --если блок не один if (#argsImg > 1) then imgBlock:attr("id", "imgBlock-"..args.number.."-"..i) if (i > 1) then imgBlock:css("display", "none") end end if (args.title "") then imgBlock:css("margin-top", "6px") end imagesi = imgBlock --если в текущем блоке 2 и больше изображений else --если блок не один if (#argsImg > 1) then imgBlock = mw.html.create("div") imgBlock:attr("id", "imgBlock-"..args.number.."-"..i) if (i > 1) then imgBlock:css("display", "none") end end for j = 1, #argsImgi do local image = mw.html.create("div") image:attr("id", "image-"..args.number.."-"..i.."-"..j) if (argsImgij3) then image:wikitext("[[Файл:"..argsImgij3.."|"..args.width.."|link=]]") elseif (argsImgij2) then image:wikitext("[[Файл:"..argsImgij2.."|"..args.width.."|link=]]") end if (j > 1) then image:css("display", "none") end --если блок не один if (#argsImg > 1) then imgBlock:node(image) else imagesi = image end end --если блок не один if (#argsImg > 1) then imagesi = imgBlock end end end return images end --вид function infoboxCharacter.build.kindCreate(argsKind, gender) local kind = mw.html.create("div") kind:addClass("infoboxCharacterKindGender colorLink") if (argsKind11 "{0}") then kind:css("display", "none") return kind end local textKind local kindImg if (mw.ustring.lower(argsKind11) "единорог") then textKind = "Единорог" kindImg = "Unicorn picto" elseif (mw.ustring.lower(argsKind11) "пегас") then textKind = "Пегас" kindImg = "Pegasus picto" elseif (mw.ustring.lower(argsKind11) "земнопони" or argsKind11 "земной пони" or argsKind11 "земная пони") then if (mw.ustring.lower(gender) "жен" or mw.ustring.lower(gender) "женский") then textKind = "Земная пони" else textKind = "Земной пони" end kindImg = "Earthpony picto" elseif (mw.ustring.lower(argsKind11) "аликорн") then textKind = "Аликорн" kindImg = "Alicorn picto" end if (textKind) then local imgBlock = mw.html.create("div") imgBlock:cssText("position:absolute; left:0; top:0") imgBlock:wikitext("link=") kind:css("padding-left", "23px") kind:node(imgBlock) kind:wikitext(""..textKind.."") else kind:css("padding-left", "3px") kind:wikitext(""..argsKind11.."") end return kind end --пол function infoboxCharacter.build.genderCreate(gender, argsKind, argsAge) local gender = mw.html.create("div") gender:addClass("infoboxCharacterKindGender") local textGender local genderImg --if (mw.ustring.lower(gender) "муж" or "мужской") then -- local kind = mw.ustring.lower(argsKind11) -- if (kind "человек") then -- local age = mw.ustring.lower(argsAge11) -- if (argsAge and age "взр" or age "взрослый") then textGender = "Мужчина" -- elseif (argsAge and age "дет" or age "детский") then -- textGender = "Мальчик" -- else -- textGender = "Юноша" -- end -- elseif (kind "единорог" or kind "пегас" or kind "земнопони" or kind "земной пони" or kind "аликорн") then -- local age = mw.ustring.lower(argsAge11) -- if (argsAge and age "дет" or age "детский") then -- textGender = "Жеребёнок" -- else -- textGender = "Жеребец" -- end -- else -- textGender = "Муж." -- end genderImg = "Male picto" --elseif (string.lower(gender) "жен") then -- if (string.lower(argsKind11) "человек") then -- if (string.lower(age11) ("взр" or "взрослый")) then -- textGender = "Женщина" -- elseif (string.lower(age11) ("дет" or "детский")) then -- textGender = "Девочка" -- else -- textGender = "Девушка" -- end -- elseif (string.lower(argsKind11) ("единорог" or "пегас" or "земнопони" or "земной пони" or "аликорн")) then -- if (string.lower(age11) ("дет" or "детский")) then -- textGender = "Кобылка" -- elseif (string.lower(age11) ("дет" or "детский")) then -- textGender = "Кобыла" -- end -- else -- textGender = "Жен." -- end -- genderImg = "Female picto" --end local imgBlock = mw.html.create("div") imgBlock:cssText("position:absolute; left:0; top:0") imgBlock:wikitext("link=") gender:css("padding-left", "23px") gender:node(imgBlock) gender:wikitext(""..textGender.."") return gender end --служебные функции infoboxCharacter.tools = {} function infoboxCharacter.tools.split(str, separator, reg) local result = {} if separator "" then result1 = str return result end local n local k local s = 0 if (not reg) then regExp = true else regExp = false end local i = 1 while k ~= str:len() do local substring n, k = string.find(str, separator, s + 1, regExp) if (k nil or n nil) then resulti = string.sub(str, s + 1, str:len()) break end substring = string.sub(str, s + 1, n - 1) if substring ~= "" then resulti = substring end s = k i = i + 1 end return result end function infoboxCharacter.tools.argsDeSerial(args, separators, pattern, iterNum) if (not iterNum) then iterNum = 1 end if (not pattern) then pattern = "" end local splitArray = infoboxCharacter.tools.split(args, separatorsiterNum) if (iterNum #separators) then return splitArray else local splitArray2 = {} for i = 1, #splitArray do if (splitArrayi ~= nil and string.find(splitArrayi, pattern) ~= nil) then splitArray2i = infoboxCharacter.tools.argsDeSerial(splitArrayi, separators, pattern, iterNum + 1) end end return splitArray2 end end function infoboxCharacter.tools.argsParse(args, images, separators, pattern) local result = {} local argsDeSerial = infoboxCharacter.tools.argsDeSerial(args, separators, pattern) if (not images1) then if (not argsDeSerial1) then return nil end result1 = {argsDeSerial11} return result else if (#argsDeSerial 0) then return nil else local template = "{0}" for i = 1, #images do resulti = {} for j = 1, #imagesi do if (argsDeSerialij nil) then resultij = template else if (string.match(argsDeSerialij, "!?{%d+%.%d+}")) then local a, b = string.match(argsDeSerialij, "!?{(%d+)%.(%d+)}") a = tonumber(a) b = tonumber(b) if (a > i or b >= j) then resultij = "проверь ссылку" else resultij = resultab if (string.sub(argsDeSerialij, 1, 1) "!") then template = resultab end end else if (string.sub(argsDeSerialij, 1, 1) "!") then template = string.sub(argsDeSerialij, 2, string.len(argsDeSerialij)) resultij = template else resultij = argsDeSerialij end end end end end end end return result end return infoboxCharacter